package com.yzt.zhuju.network.service;

import com.yzt.zhuju.network.apiconfig.AccountUrlConstant;
import com.yzt.zhuju.network.entity.home.SearchUserBean;
import com.yzt.zhuju.network.entity.home.UserInfoBean;
import com.yzt.zhuju.network.entity.login.countryCode.GetZoneResponse;
import com.yzt.zhuju.network.entity.loginout.LogoffEntity;
import com.yzt.zhuju.network.entity.mine.BlackListBean;
import com.yzt.zhuju.network.entity.mine.FileBean;
import com.yzt.zhuju.network.entity.mine.FriendBaseBean;
import com.yzt.zhuju.network.entity.mine.GiftListBean;
import com.yzt.zhuju.network.entity.mine.UserLevelBaseBean;
import com.yzt.zhuju.network.entity.mine.WatchVideoBean;
import com.yzt.zhuju.network.entity.sysConfig.CountryBean;
import com.yzt.zhuju.network.entity.user.GroupProfileBase;
import com.yzt.zhuju.network.entity.user.LoginBean;
import com.yzt.zhuju.network.entity.user.PersonalDetail;
import com.yzt.zhuju.network.entity.user.PersonalDetailBasic;
import com.yzt.zhuju.network.entity.user.UserLoginInfo;
import com.yzt.zhuju.network.entity.user.UserProfileList;
import com.yzt.plugin_network.response.HttpResponse;

import java.util.List;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import rx.Observable;

/**
 * author : bob
 * date   : 2022/12/6
 * desc   :
 */
public interface AccountService {

    /**
     * 登录
     */
    @POST(AccountUrlConstant.POST_PWD_LOGIN)
    Observable<HttpResponse<UserLoginInfo>> postLogin(@Body RequestBody body);

    /**
     * 手机登录
     */
    @POST(AccountUrlConstant.POST_PHONE_LOGIN)
    Observable<HttpResponse<UserLoginInfo>> phoneLogin(@Body RequestBody body);

    /**
     * 第三方登录
     */
    @POST(AccountUrlConstant.POST_OTHER_LOGIN)
    Observable<HttpResponse<LoginBean>> otherLogin(@Body RequestBody body);

    /**
     * 第三方登录
     */
    @POST(AccountUrlConstant.POST_ONE_KEY_LOGIN)
    Observable<HttpResponse<LoginBean>> oneKeyLogin(@Body RequestBody body);

    /**
     * 第三方绑定/解绑
     */
    @POST(AccountUrlConstant.POST_OTHER_BIND)
    Observable<HttpResponse> otherBin(@Body RequestBody body);

    /**
     * 选择国家/地区
     */
    @GET(AccountUrlConstant.GET_COUNTRY_OR_ZONE_CODE)
    Observable<HttpResponse<GetZoneResponse>> getCountryOrZoneCode();

    /**
     * 获取验证码
     */
    @POST(AccountUrlConstant.GET_VERIFY_CODE)
    Observable<HttpResponse> postGetVerifyCode(@Body RequestBody body);

    /**
     * 获取验证码
     */
    @POST(AccountUrlConstant.GET_LOGIN_VERIFY_CODE)
    Observable<HttpResponse> postLoginVerifyCode(@Body RequestBody body);

    /**
     * 获取修改手机号验证码
     */
    @POST(AccountUrlConstant.GET_ACCOUNT_PHONE_UPDATE_CODE)
    Observable<HttpResponse> getAccountPhoneUpdateCode(@Body RequestBody body);

    /**
     * 获取修改手机号验证码
     */
    @POST(AccountUrlConstant.GET_ACCOUNT_PHONE_UPDATE)
    Observable<HttpResponse> accountPhoneUpdate(@Body RequestBody body);

    /**
     * 获取融云信息
     */
    @POST(AccountUrlConstant.GET_RONG_INFO)
    Observable<HttpResponse<UserLoginInfo>> getRongInfo(@Body RequestBody body);

    /**
     * 黑名单
     */
    @POST(AccountUrlConstant.API_USER_BLACKLIST)
    Observable<HttpResponse<List<BlackListBean>>> blackList(@Body RequestBody body);

    /**
     * 修改密码
     */
    @POST(AccountUrlConstant.API_USER_MODIFY_PWD)
    Observable<HttpResponse> modifyPwd(@Body RequestBody body);

    /**
     * 申请注销
     */
    @POST(AccountUrlConstant.API_USER_LOGOFF)
    Observable<HttpResponse<LogoffEntity>> logoff(@Body RequestBody body);

    /**
     * 关注列表
     */
    @POST(AccountUrlConstant.API_USER_FOLLOW_LIST)
    Observable<HttpResponse<FriendBaseBean>> followList(@Body RequestBody body);

    /**
     * 粉丝列表
     */
    @POST(AccountUrlConstant.API_USER_FANS_LIST)
    Observable<HttpResponse<FriendBaseBean>> fansList(@Body RequestBody body);

    /**
     * 好友列表
     */
    @POST(AccountUrlConstant.API_USER_GOOD_FRIEND_LIST)
    Observable<HttpResponse<FriendBaseBean>> goodFriendList(@Body RequestBody body);

    /**
     * 拉黑/取消拉黑
     */
    @POST(AccountUrlConstant.API_USER_CANCEL_BLACK)
    Observable<HttpResponse> cancelBlack(@Body RequestBody body);

    /**
     * 按需获取用户信息的部分
     */
    @POST(AccountUrlConstant.API_MINE_GET_FULL_INFO_PARTS)
    Observable<HttpResponse<PersonalDetailBasic>> getFullInfoParts(@Body RequestBody body);

    /**
     * 绑定推送
     */
    @POST(AccountUrlConstant.API_BIND_PUSH)
    Observable<HttpResponse> bindPush(@Body RequestBody body);

    /**
     * 按需获取用户信息的部分
     */
    @POST(AccountUrlConstant.API_MINE_GET_OTHER_INFO)
    Observable<HttpResponse<PersonalDetailBasic>> getOtherInfo(@Body RequestBody body);

    /**
     * 获取用户等级
     */
    @GET(AccountUrlConstant.API_MINE_GET_USER_LEVEL)
    Observable<HttpResponse<UserLevelBaseBean>> getLevelInfo(@Query("targetUid") String targetUid);

    /**
     * 获取激励视频基础信息
     */
    @GET(AccountUrlConstant.API_MINE_GET_WATCH_VIDEO_INFO)
    Observable<HttpResponse<WatchVideoBean>> getWatchVideoInfo();

    /**
     * 获取用户完整信息
     */
    @POST(AccountUrlConstant.API_MINE_GET_OTHER_INFO)
    Observable<HttpResponse<UserInfoBean>> getUserFullInfo(@Body RequestBody body);


    /**
     * 用户资料完善
     */
    @POST(AccountUrlConstant.API_MINE_EDIT_USER_INFO)
    Observable<HttpResponse<PersonalDetail>> editUserInfo(@Body RequestBody body);

    /**
     * 用户资料完善
     */
    @POST(AccountUrlConstant.API_MINE_EDIT_USER_INFO_REGISTER)
    Observable<HttpResponse<HttpResponse>> registerEditUserInfo(@Body RequestBody body);

    /**
     * 删除匹配数据的视频
     */
    @POST(AccountUrlConstant.API_MINE_EDIT_DEL_VIDEO)
    Observable<HttpResponse<HttpResponse>> delVideo(@Body RequestBody body);

    /**
     * 提交邀请码
     */
    @POST(AccountUrlConstant.API_MINE_SUBMIT_INVITE_CODE)
    Observable<HttpResponse> submitInviteCode(@Body RequestBody body);

    /**
     * 获取默认国家
     */
    @POST(AccountUrlConstant.API_MINE_GET_DEFAULT_COUNTRY)
    Observable<HttpResponse<CountryBean>> getDefaultCountry(@Body RequestBody body);

    /**
     * 上传照片
     */
    @Multipart
    @POST(AccountUrlConstant.API_MINE_SUBMIT_FILE)
    Observable<HttpResponse<FileBean>> uploadFile(@Part MultipartBody.Part parts, @Header("gender") int gender);

    /**
     * 上传照片
     */
    @Multipart
    @POST(AccountUrlConstant.API_MINE_SUBMIT_IMAGE_LITE)
    Observable<HttpResponse<FileBean>> uploadFileLite(@Part MultipartBody.Part parts);

    /**
     * 上传视频
     */
    @Multipart
    @POST(AccountUrlConstant.API_MINE_SUBMIT_FILE_VIDEO)
    Observable<HttpResponse<FileBean>> uploadFileVideo(@Part MultipartBody.Part parts);

    /**
     * 上传视频 lite
     */
    @Multipart
    @POST(AccountUrlConstant.API_MINE_SUBMIT_FILE_VIDEO_LITE)
    Observable<HttpResponse<FileBean>> uploadFileVideoLite(@Part MultipartBody.Part parts);

    /**
     * 关注/取消关注
     */
    @POST(AccountUrlConstant.POST_FOLLOW_OR_FOLLOW_USER)
    Observable<HttpResponse> postFollowOrfollowUser(@Body RequestBody body);

    /**
     * 关注/取消关注
     */
    @POST(AccountUrlConstant.POST_FOLLOW_OR_UN_FOLLOW_USER)
    Observable<HttpResponse> postFollowOrUnfollowUser(@Body RequestBody body);

    /**
     * 举报
     */
    @POST(AccountUrlConstant.API_RELATION_INFORM)
    Observable<HttpResponse<Object>> relationInform(@Body RequestBody body);

    /**
     * 获取礼物墙列表
     */
    @POST(AccountUrlConstant.API_USER_GIFT_WALL_LIST)
    Observable<HttpResponse<GiftListBean>> loadGiftWallList(@Body RequestBody body);

    /**
     * 获取用户信息列表
     */
    @POST(AccountUrlConstant.GET_USER_LOAD_USER_PROFILE_LIST)
    Observable<HttpResponse<UserProfileList>> loadUserProfileList(@Body RequestBody body);

    /**
     * 获取群聊信息列表
     */
    @POST(AccountUrlConstant.GET_GROUP_LOAD_GROUP_PROFILE_LIST)
    Observable<HttpResponse<GroupProfileBase>> loadGroupProfileList(@Body RequestBody body);

    /**
     * 搜索用户
     */
    @POST(AccountUrlConstant.API_SEARCH_USER)
    Observable<HttpResponse<List<SearchUserBean>>> searchUser(@Body RequestBody body);


    /**
     * 签到
     */
    @POST(AccountUrlConstant.API_USER_SIGN)
    Observable<HttpResponse<Object>> touchSign(@Body RequestBody body);

    /**
     * 修改提醒状态
     */
    @POST(AccountUrlConstant.API_USER_SIGN_TIP_STATUS)
    Observable<HttpResponse<Object>> modifySignTip(@Body RequestBody body);

    /**
     * 获取更换银行卡验证码
     */
    @POST(AccountUrlConstant.API_BANK_UPDATE_CODE)
    Observable<HttpResponse<Object>> getBankCardMsg(@Body RequestBody body);

    /**
     * 更换银行卡
     */
    @POST(AccountUrlConstant.API_BANK_UPDATE)
    Observable<HttpResponse<Object>> bankCardUpdate(@Body RequestBody body);
}
